#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

#include "json/json.h"

using namespace std;

int main() {
  /**
  Json::Value root;
    Json::FastWriter writer;
    Json::Value person;

    person["name"] = "tocy";
    person["age"] = 1000;
    root.append(person);

    string json_file = writer.write(root);
  */

  // 从文件中加载JSON数据
  ifstream ifs("example.json");
  stringstream buffer;
  buffer << ifs.rdbuf();
  ifs.close();
  string json_string = buffer.str();

  // 解析JSON数据
  Json::Value root;
  Json::Reader reader;
  bool success = reader.parse(json_string, root);
  if (!success) {
    cout << "Failed to parse JSON data!" << endl;
    return 1;
  }

  // 读取JSON数据中的元素
  string name = root["name"].asString();
  int age = root["age"].asInt();
  string email = root["email"].asString();
  Json::Value hobbies = root["hobbies"];

  // 打印JSON数据中的元素
  cout << "Name: " << name << endl;
  cout << "Age: " << age << endl;
  cout << "Email: " << email << endl;
  cout << "Hobbies: ";
  for (int i = 0; i < static_cast<int>(hobbies.size()); ++i) {
    cout << hobbies[i].asString() << " ";
  }
  cout << endl;

  // 创建JSON数据
  Json::Value new_hobby_root;
  Json::Value enginnering;
  enginnering["name"] = "David";
  enginnering["age"] = 25;
  enginnering["email"] = "hmd_hubei_cn@163.com";
  new_hobby_root["workder"] = enginnering;
  new_hobby_root["keywords"].append("C++");
  new_hobby_root["keywords"].append("Python");
  Json::FastWriter writer;
  std::string new_hobby_json_file = writer.write(new_hobby_root);
  cout << new_hobby_json_file << endl;
  ofstream ofs("example_out.json");
  ofs <<  new_hobby_root.toStyledString();
  ofs.close();

  return 0;
}

/**
在这个示例中，我们使用 Json::Reader 类从文件读取JSON数据，然后使用 Json::Value
对象解析JSON数据中的元素。 我们使用 asString() 和 asInt()
方法获取字符串和整数类型的值，使用 [] 运算符和 size()
方法来遍历JSON数组中的元素。
可以根据具体的JSON数据结构调整此示例代码。需要注意的是，使用JSON解析库会增加代码的复杂性，同时也可能导致性能的下降。
*/